/**
 * PANDA 3D SOFTWARE
 * Copyright (c) Carnegie Mellon University.  All rights reserved.
 *
 * All use of this software is subject to the terms of the revised BSD
 * license.  You should have received a copy of this license along
 * with this source code in a file named "LICENSE."
 *
 * @file trueClock.I
 * @author drose
 * @date 2000-07-04
 */

#ifdef _WIN32

/**
 *
 */
INLINE double TrueClock::
get_short_time() {
  bool is_paranoid_clock = get_paranoid_clock();

  if (is_paranoid_clock) {
    _lock.lock();
  }

  double time = get_short_raw_time();

  if (is_paranoid_clock) {
    // Check for rollforwards, rollbacks, and compensate for Speed Gear type
    // programs by verifying against the time of day clock.
    time = correct_time(time);
    _lock.unlock();
  }

  return time;
}

#else  // _WIN32

/**
 *
 */
INLINE double TrueClock::
get_short_time() {
  return get_short_raw_time();
}

#endif  // _WIN32


/**
 * Returns the number of clock errors that have been detected.  Each time a
 * clock error is detected, in which the value returned by either of the above
 * methods is suspect, the value returned by this method will be incremented.
 * Applications can monitor this value and react, for instance, by
 * resynchronizing their clocks each time this value changes.
 */
INLINE int TrueClock::
get_error_count() const {
  return _error_count;
}

/**
 * Returns a pointer to the one TrueClock object in the world.
 */
INLINE TrueClock *TrueClock::
get_global_ptr() {
  if (_global_ptr == nullptr) {
    _global_ptr = new TrueClock;
  }
  return _global_ptr;
}

/**
 * A protected destructor because no one should try to delete the global
 * TrueClock.
 */
INLINE TrueClock::
~TrueClock() {
}
